/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.gpstracking.DA;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.gpstracking.BE.Condicion;
import com.gpstracking.BE.CondicionArea;
import com.gpstracking.BE.CondicionFechaHora;
import com.gpstracking.BE.CondicionInmovilidad;
import com.gpstracking.BE.CondicionRuta;
import com.gpstracking.BE.Usuario;

/**
 *
 * @author jmj
 */
public class CondicionDA {

    public static List<CondicionArea> getCondicionAreas(Condicion condition) {
    	
    	Session hbsession = HUtil.getSession();
    	Transaction tx = hbsession.beginTransaction();
		tx.begin();
        Query query = hbsession.createQuery("FROM CondicionArea WHERE idCondicion = " + condition.getIdCondicion());
        return (List<CondicionArea>) query.list();
    }

    public static List<CondicionInmovilidad> getCondicionInmovilidades(Condicion condition) {
    	Session hbsession = HUtil.getSession();
    	Transaction tx = hbsession.beginTransaction();
		tx.begin();
        Query query = hbsession.createQuery("FROM CondicionInmovilidad WHERE idCondicion = " + condition.getIdCondicion());
        return (List<CondicionInmovilidad>) query.list();
    }

    public static void save(Condicion condicion) {
    	Session hbsession = HUtil.getSession();
        Transaction tx = hbsession.beginTransaction();
        tx.begin();
        
        hbsession.save( condicion);
        
        tx.commit();
                
        
        
    }

    public static Condicion get(Integer id) {
    	Session hbsession = HUtil.getSession();
    	Transaction tx = hbsession.beginTransaction();
		tx.begin();
        Query query = hbsession.createQuery("FROM Condicion WHERE idCondicion = " + id);
        List<Condicion> res =  (List<Condicion>) query.list();
        
        return res.isEmpty() ? null : res.get(0);
        
    }

    public static boolean save(Condicion condicion, CondicionArea condicionArea, List<CondicionFechaHora> condicionesFechaHora/*, List<Dispositivo> dispositivos */) {
    	Session hbsession = null;
    	try{
    		hbsession = HUtil.getSession();
	        Transaction tx = hbsession.beginTransaction();
	        tx.begin();
	        hbsession.save( condicion );
	            
	        hbsession.save( condicionArea );
	            
	        for( CondicionFechaHora it : condicionesFechaHora){
	
	            hbsession.save( it );
	        }
	        
	        
	        
	        tx.commit();
	        

	        return true;
    	}catch(Exception ex ){

    		return false;
    		
    	}
    }
    
    
    public static boolean save(Condicion condicion, CondicionRuta condicionRuta, List<CondicionFechaHora> condicionesFechaHora/*, List<Dispositivo> dispositivos */) {
    	Session hbsession = null;
    	try{
    		hbsession = HUtil.getSession();
	        Transaction tx = hbsession.beginTransaction();
	        tx.begin();
	        hbsession.save( condicion );
	        
	     
	        
	        hbsession.save( condicionRuta );
	            
	        for( CondicionFechaHora it : condicionesFechaHora){
	
	            hbsession.save( it );
	        }
	        
	        
	        
	        tx.commit();
        

	        
	        return true;
    	}catch(Exception ex ){
    		
    		return false;
		
    	}
    }

   

	public static boolean save(Condicion condicion, CondicionInmovilidad condicionInmovilidad, List<CondicionFechaHora> condicionesFechaHora/*, List<Dispositivo> dispositivos */) {
	        Session hbsession = null;
	        try{
	        	hbsession = HUtil.getSession();
		        Transaction tx = hbsession.beginTransaction();
		        tx.begin();
		        hbsession.save( condicion );
		        
		     
		        
		        hbsession.save( condicionInmovilidad );
		            
		        for( CondicionFechaHora it : condicionesFechaHora){
	
		            hbsession.save( it );
		        }
		        
		        
		        
		        tx.commit();
		        
		        
			    return true;
			}catch(Exception ex ){
				
				return false;
			
			}
	   }
	 public static List<Condicion> getByListId(List<Integer> idCondiciones) {
	        List<Condicion> condiciones = new ArrayList< Condicion >();
	        
	        Session hbsession = HUtil.getSession();
	        Transaction tx = hbsession.beginTransaction();
			tx.begin();
	        for( Integer id : idCondiciones){
	            Query query = hbsession.createQuery("FROM Condicion WHERE idCondicion = "+ id);
	            List<Condicion> res =  (List<Condicion>) query.list();
	            if ( res.isEmpty() ) continue;
	            condiciones.add( res.get(0) );
	        }
	        
	        
	        return condiciones;
	    }
	    
		public static List<Condicion> getActivas(Usuario usuario ) {
			Session hbsession = HUtil.getSession();
			Transaction tx = hbsession.beginTransaction();
			tx.begin();
	        Query query = hbsession.createQuery("FROM Condicion WHERE usuario.idUsuario = :iduser");
	        query.setParameter("iduser", usuario.getIdUsuario());
	        List<Condicion> res = (List<Condicion>) query.list();
	        
	        return res;
		}
    
}
